mirror of
https://github.com/FranP-code/create-better-t-stack.git
synced 2025-10-12 23:52:15 +00:00
upgrade to biome v2
This commit is contained in:
5
.changeset/pink-pigs-matter.md
Normal file
5
.changeset/pink-pigs-matter.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"create-better-t-stack": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
upgrade to biome v2
|
||||||
@@ -49,7 +49,7 @@ export const dependencyVersionMap = {
|
|||||||
|
|
||||||
"@tauri-apps/cli": "^2.4.0",
|
"@tauri-apps/cli": "^2.4.0",
|
||||||
|
|
||||||
"@biomejs/biome": "1.9.4",
|
"@biomejs/biome": "^2.0.0",
|
||||||
|
|
||||||
husky: "^9.1.7",
|
husky: "^9.1.7",
|
||||||
"lint-staged": "^15.5.0",
|
"lint-staged": "^15.5.0",
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import pc from "picocolors";
|
|||||||
import type { ProjectConfig } from "../../types";
|
import type { ProjectConfig } from "../../types";
|
||||||
import { commandExists } from "../../utils/command-exists";
|
import { commandExists } from "../../utils/command-exists";
|
||||||
import {
|
import {
|
||||||
type EnvVariable,
|
|
||||||
addEnvVariablesToFile,
|
addEnvVariablesToFile,
|
||||||
|
type EnvVariable,
|
||||||
} from "../project-generation/env-setup";
|
} from "../project-generation/env-setup";
|
||||||
|
|
||||||
type MongoDBConfig = {
|
type MongoDBConfig = {
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import pc from "picocolors";
|
|||||||
import type { PackageManager, ProjectConfig } from "../../types";
|
import type { PackageManager, ProjectConfig } from "../../types";
|
||||||
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
||||||
import {
|
import {
|
||||||
type EnvVariable,
|
|
||||||
addEnvVariablesToFile,
|
addEnvVariablesToFile,
|
||||||
|
type EnvVariable,
|
||||||
} from "../project-generation/env-setup";
|
} from "../project-generation/env-setup";
|
||||||
|
|
||||||
type NeonConfig = {
|
type NeonConfig = {
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import type { PackageManager } from "../../types";
|
|||||||
import { addPackageDependency } from "../../utils/add-package-deps";
|
import { addPackageDependency } from "../../utils/add-package-deps";
|
||||||
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
||||||
import {
|
import {
|
||||||
type EnvVariable,
|
|
||||||
addEnvVariablesToFile,
|
addEnvVariablesToFile,
|
||||||
|
type EnvVariable,
|
||||||
} from "../project-generation/env-setup";
|
} from "../project-generation/env-setup";
|
||||||
|
|
||||||
type PrismaConfig = {
|
type PrismaConfig = {
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import pc from "picocolors";
|
|||||||
import type { PackageManager, ProjectConfig } from "../../types";
|
import type { PackageManager, ProjectConfig } from "../../types";
|
||||||
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
||||||
import {
|
import {
|
||||||
type EnvVariable,
|
|
||||||
addEnvVariablesToFile,
|
addEnvVariablesToFile,
|
||||||
|
type EnvVariable,
|
||||||
} from "../project-generation/env-setup";
|
} from "../project-generation/env-setup";
|
||||||
|
|
||||||
async function writeSupabaseEnvFile(
|
async function writeSupabaseEnvFile(
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import pc from "picocolors";
|
|||||||
import type { ProjectConfig } from "../../types";
|
import type { ProjectConfig } from "../../types";
|
||||||
import { commandExists } from "../../utils/command-exists";
|
import { commandExists } from "../../utils/command-exists";
|
||||||
import {
|
import {
|
||||||
type EnvVariable,
|
|
||||||
addEnvVariablesToFile,
|
addEnvVariablesToFile,
|
||||||
|
type EnvVariable,
|
||||||
} from "../project-generation/env-setup";
|
} from "../project-generation/env-setup";
|
||||||
|
|
||||||
type TursoConfig = {
|
type TursoConfig = {
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import path from "node:path";
|
|||||||
import consola from "consola";
|
import consola from "consola";
|
||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import type {
|
import type {
|
||||||
API,
|
|
||||||
Addons,
|
Addons,
|
||||||
|
API,
|
||||||
Database,
|
Database,
|
||||||
Frontend,
|
Frontend,
|
||||||
ORM,
|
ORM,
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import { consola } from "consola";
|
import { consola } from "consola";
|
||||||
import pc from "picocolors";
|
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 { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
||||||
|
|
||||||
import type { ProjectConfig } from "../../types";
|
|
||||||
|
|
||||||
export function displayPostInstallInstructions(
|
export function displayPostInstallInstructions(
|
||||||
config: ProjectConfig & { depsInstalled: boolean },
|
config: ProjectConfig & { depsInstalled: boolean },
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import type { Frontend } from "../../types";
|
import type { Frontend, ProjectConfig } from "../../types";
|
||||||
import { addPackageDependency } from "../../utils/add-package-deps";
|
import { addPackageDependency } from "../../utils/add-package-deps";
|
||||||
import { setupStarlight } from "./starlight-setup";
|
import { setupStarlight } from "./starlight-setup";
|
||||||
import { setupTauri } from "./tauri-setup";
|
import { setupTauri } from "./tauri-setup";
|
||||||
|
|
||||||
import type { ProjectConfig } from "../../types";
|
|
||||||
|
|
||||||
export async function setupAddons(config: ProjectConfig) {
|
export async function setupAddons(config: ProjectConfig) {
|
||||||
const { addons, frontend, projectDir } = config;
|
const { addons, frontend, projectDir } = config;
|
||||||
const hasReactWebFrontend =
|
const hasReactWebFrontend =
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import type { AvailableDependencies } from "../../constants";
|
import type { AvailableDependencies } from "../../constants";
|
||||||
import { addPackageDependency } from "../../utils/add-package-deps";
|
|
||||||
|
|
||||||
import type { ProjectConfig } from "../../types";
|
import type { ProjectConfig } from "../../types";
|
||||||
|
import { addPackageDependency } from "../../utils/add-package-deps";
|
||||||
|
|
||||||
export async function setupBackendDependencies(
|
export async function setupBackendDependencies(
|
||||||
config: ProjectConfig,
|
config: ProjectConfig,
|
||||||
|
|||||||
@@ -3,16 +3,14 @@ import { spinner } from "@clack/prompts";
|
|||||||
import consola from "consola";
|
import consola from "consola";
|
||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import pc from "picocolors";
|
import pc from "picocolors";
|
||||||
|
import type { ProjectConfig } from "../../types";
|
||||||
import { addPackageDependency } from "../../utils/add-package-deps";
|
import { addPackageDependency } from "../../utils/add-package-deps";
|
||||||
import { setupMongoDBAtlas } from "../database-providers/mongodb-atlas-setup";
|
import { setupMongoDBAtlas } from "../database-providers/mongodb-atlas-setup";
|
||||||
|
import { setupNeonPostgres } from "../database-providers/neon-setup";
|
||||||
import { setupPrismaPostgres } from "../database-providers/prisma-postgres-setup";
|
import { setupPrismaPostgres } from "../database-providers/prisma-postgres-setup";
|
||||||
import { setupSupabase } from "../database-providers/supabase-setup";
|
import { setupSupabase } from "../database-providers/supabase-setup";
|
||||||
import { setupTurso } from "../database-providers/turso-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<void> {
|
export async function setupDatabase(config: ProjectConfig): Promise<void> {
|
||||||
const { database, orm, dbSetup, backend, projectDir } = config;
|
const { database, orm, dbSetup, backend, projectDir } = config;
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,10 @@ import { consola } from "consola";
|
|||||||
import { execa } from "execa";
|
import { execa } from "execa";
|
||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import pc from "picocolors";
|
import pc from "picocolors";
|
||||||
|
import type { ProjectConfig } from "../../types";
|
||||||
import { addPackageDependency } from "../../utils/add-package-deps";
|
import { addPackageDependency } from "../../utils/add-package-deps";
|
||||||
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command";
|
||||||
|
|
||||||
import type { ProjectConfig } from "../../types";
|
|
||||||
|
|
||||||
export async function setupTauri(config: ProjectConfig): Promise<void> {
|
export async function setupTauri(config: ProjectConfig): Promise<void> {
|
||||||
const { packageManager, frontend, projectDir } = config;
|
const { packageManager, frontend, projectDir } = config;
|
||||||
const s = spinner();
|
const s = spinner();
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ import { gatherConfig } from "./prompts/config-prompts";
|
|||||||
import { getProjectName } from "./prompts/project-name";
|
import { getProjectName } from "./prompts/project-name";
|
||||||
import type { CreateInput, ProjectConfig } from "./types";
|
import type { CreateInput, ProjectConfig } from "./types";
|
||||||
import {
|
import {
|
||||||
APISchema,
|
|
||||||
AddonsSchema,
|
AddonsSchema,
|
||||||
|
APISchema,
|
||||||
BackendSchema,
|
BackendSchema,
|
||||||
DatabaseSchema,
|
DatabaseSchema,
|
||||||
DatabaseSetupSchema,
|
DatabaseSetupSchema,
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { cancel, group } from "@clack/prompts";
|
import { cancel, group } from "@clack/prompts";
|
||||||
import pc from "picocolors";
|
import pc from "picocolors";
|
||||||
import type {
|
import type {
|
||||||
API,
|
|
||||||
Addons,
|
Addons,
|
||||||
|
API,
|
||||||
Backend,
|
Backend,
|
||||||
Database,
|
Database,
|
||||||
DatabaseSetup,
|
DatabaseSetup,
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ export async function trackProjectCreation(
|
|||||||
try {
|
try {
|
||||||
const sessionId = `cli_${crypto.randomUUID().replace(/-/g, "")}`;
|
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;
|
const { projectName, projectDir, relativePath, ...safeConfig } = config;
|
||||||
|
|
||||||
posthog.capture({
|
posthog.capture({
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { consola } from "consola";
|
import { consola } from "consola";
|
||||||
import {
|
import {
|
||||||
type API,
|
|
||||||
type Addons,
|
type Addons,
|
||||||
|
type API,
|
||||||
type Backend,
|
type Backend,
|
||||||
type CLIInput,
|
type CLIInput,
|
||||||
type Database,
|
type Database,
|
||||||
|
|||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
83
apps/cli/templates/addons/biome/biome.json.hbs
Normal file
83
apps/cli/templates/addons/biome/biome.json.hbs
Normal file
@@ -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}}
|
||||||
|
}
|
||||||
@@ -32,6 +32,7 @@ export default function UserMenu() {
|
|||||||
<div class="absolute right-0 mt-2 w-56 rounded p-1 shadow-sm">
|
<div class="absolute right-0 mt-2 w-56 rounded p-1 shadow-sm">
|
||||||
<div class="px-4 text-sm">{session().data?.user.email}</div>
|
<div class="px-4 text-sm">{session().data?.user.email}</div>
|
||||||
<button
|
<button
|
||||||
|
type="button"
|
||||||
class="mt-1 w-full border rounded px-4 text-center text-sm"
|
class="mt-1 w-full border rounded px-4 text-center text-sm"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setIsMenuOpen(false);
|
setIsMenuOpen(false);
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
|
import { motion } from "motion/react";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { useTheme } from "next-themes";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
import { ScrollArea } from "@/components/ui/scroll-area";
|
import { ScrollArea } from "@/components/ui/scroll-area";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { motion } from "motion/react";
|
|
||||||
import { useTheme } from "next-themes";
|
|
||||||
import Image from "next/image";
|
|
||||||
import { useEffect, useState } from "react";
|
|
||||||
|
|
||||||
type TechOption = {
|
type TechOption = {
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import { Check, ClipboardCopy } from "lucide-react";
|
import { Check, ClipboardCopy } from "lucide-react";
|
||||||
import { AnimatePresence, motion } from "motion/react";
|
import { AnimatePresence, motion } from "motion/react";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
import PackageIcon from "./icons";
|
import PackageIcon from "./icons";
|
||||||
|
|
||||||
const CodeContainer = () => {
|
const CodeContainer = () => {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { ThemeToggle } from "@/components/theme-toggle";
|
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import { Github, Maximize2, Menu, X } from "lucide-react";
|
import { Github, Maximize2, Menu, X } from "lucide-react";
|
||||||
import { AnimatePresence, motion } from "motion/react";
|
import { AnimatePresence, motion } from "motion/react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import { ThemeToggle } from "@/components/theme-toggle";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
import PackageIcon from "./icons";
|
import PackageIcon from "./icons";
|
||||||
|
|
||||||
export default function Navbar() {
|
export default function Navbar() {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
const NpmPackage = () => {
|
const NpmPackage = () => {
|
||||||
const [version, setVersion] = useState("");
|
const [version, setVersion] = useState("");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { Sponsor } from "@/lib/types";
|
|
||||||
import { Github, Globe, Heart, Terminal } from "lucide-react";
|
import { Github, Globe, Heart, Terminal } from "lucide-react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import type { Sponsor } from "@/lib/types";
|
||||||
|
|
||||||
export default function SponsorsSection() {
|
export default function SponsorsSection() {
|
||||||
const [sponsors, setSponsors] = useState<Sponsor[]>([]);
|
const [sponsors, setSponsors] = useState<Sponsor[]>([]);
|
||||||
|
|||||||
@@ -1,23 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { ThemeToggle } from "@/components/theme-toggle";
|
|
||||||
import { ScrollArea } from "@/components/ui/scroll-area";
|
|
||||||
import {
|
|
||||||
Tooltip,
|
|
||||||
TooltipContent,
|
|
||||||
TooltipProvider,
|
|
||||||
TooltipTrigger,
|
|
||||||
} from "@/components/ui/tooltip";
|
|
||||||
import {
|
|
||||||
DEFAULT_STACK,
|
|
||||||
PRESET_TEMPLATES,
|
|
||||||
type StackState,
|
|
||||||
TECH_OPTIONS,
|
|
||||||
isStackDefault,
|
|
||||||
} from "@/lib/constant";
|
|
||||||
import { stackParsers, stackQueryStatesOptions } from "@/lib/stack-url-state";
|
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import discordLogo from "@/public/icon/discord.svg";
|
|
||||||
import {
|
import {
|
||||||
Check,
|
Check,
|
||||||
ClipboardCopy,
|
ClipboardCopy,
|
||||||
@@ -31,13 +13,31 @@ import {
|
|||||||
Terminal,
|
Terminal,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { motion } from "motion/react";
|
import { motion } from "motion/react";
|
||||||
import { useTheme } from "next-themes";
|
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { useTheme } from "next-themes";
|
||||||
import { useQueryStates } from "nuqs";
|
import { useQueryStates } from "nuqs";
|
||||||
import type React from "react";
|
import type React from "react";
|
||||||
import { useEffect, useMemo, useRef, useState } from "react";
|
import { useEffect, useMemo, useRef, useState } from "react";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
|
import { ThemeToggle } from "@/components/theme-toggle";
|
||||||
|
import { ScrollArea } from "@/components/ui/scroll-area";
|
||||||
|
import {
|
||||||
|
Tooltip,
|
||||||
|
TooltipContent,
|
||||||
|
TooltipProvider,
|
||||||
|
TooltipTrigger,
|
||||||
|
} from "@/components/ui/tooltip";
|
||||||
|
import {
|
||||||
|
DEFAULT_STACK,
|
||||||
|
isStackDefault,
|
||||||
|
PRESET_TEMPLATES,
|
||||||
|
type StackState,
|
||||||
|
TECH_OPTIONS,
|
||||||
|
} from "@/lib/constant";
|
||||||
|
import { stackParsers, stackQueryStatesOptions } from "@/lib/stack-url-state";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
import discordLogo from "@/public/icon/discord.svg";
|
||||||
|
|
||||||
const validateProjectName = (name: string): string | undefined => {
|
const validateProjectName = (name: string): string | undefined => {
|
||||||
const INVALID_CHARS = ["<", ">", ":", '"', "|", "?", "*"];
|
const INVALID_CHARS = ["<", ">", ":", '"', "|", "?", "*"];
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import {
|
|
||||||
type ChartConfig,
|
|
||||||
ChartContainer,
|
|
||||||
ChartLegend,
|
|
||||||
ChartLegendContent,
|
|
||||||
ChartTooltip,
|
|
||||||
ChartTooltipContent,
|
|
||||||
} from "@/components/ui/chart";
|
|
||||||
import discordLogo from "@/public/icon/discord.svg";
|
|
||||||
import { format, parseISO } from "date-fns";
|
import { format, parseISO } from "date-fns";
|
||||||
import { Cpu, Download, Terminal, TrendingUp, Users } from "lucide-react";
|
import { Cpu, Download, Terminal, TrendingUp, Users } from "lucide-react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
@@ -25,6 +16,15 @@ import {
|
|||||||
XAxis,
|
XAxis,
|
||||||
YAxis,
|
YAxis,
|
||||||
} from "recharts";
|
} from "recharts";
|
||||||
|
import {
|
||||||
|
type ChartConfig,
|
||||||
|
ChartContainer,
|
||||||
|
ChartLegend,
|
||||||
|
ChartLegendContent,
|
||||||
|
ChartTooltip,
|
||||||
|
ChartTooltipContent,
|
||||||
|
} from "@/components/ui/chart";
|
||||||
|
import discordLogo from "@/public/icon/discord.svg";
|
||||||
import Navbar from "../_components/navbar";
|
import Navbar from "../_components/navbar";
|
||||||
|
|
||||||
interface AnalyticsData {
|
interface AnalyticsData {
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { TECH_OPTIONS } from "@/lib/constant";
|
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import discordLogo from "@/public/icon/discord.svg";
|
|
||||||
import {
|
import {
|
||||||
Check,
|
Check,
|
||||||
ChevronRight,
|
ChevronRight,
|
||||||
@@ -13,6 +10,9 @@ import {
|
|||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import { TECH_OPTIONS } from "@/lib/constant";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
import discordLogo from "@/public/icon/discord.svg";
|
||||||
import Footer from "./_components/footer";
|
import Footer from "./_components/footer";
|
||||||
import PackageIcon from "./_components/icons";
|
import PackageIcon from "./_components/icons";
|
||||||
import Navbar from "./_components/navbar";
|
import Navbar from "./_components/navbar";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { source } from "@/lib/source";
|
|
||||||
import { createFromSource } from "fumadocs-core/search/server";
|
import { createFromSource } from "fumadocs-core/search/server";
|
||||||
|
import { source } from "@/lib/source";
|
||||||
|
|
||||||
export const revalidate = false;
|
export const revalidate = false;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { source } from "@/lib/source";
|
|
||||||
import Features from "components/features";
|
import Features from "components/features";
|
||||||
import defaultMdxComponents from "fumadocs-ui/mdx";
|
import defaultMdxComponents from "fumadocs-ui/mdx";
|
||||||
import {
|
import {
|
||||||
@@ -8,6 +7,7 @@ import {
|
|||||||
DocsTitle,
|
DocsTitle,
|
||||||
} from "fumadocs-ui/page";
|
} from "fumadocs-ui/page";
|
||||||
import { notFound } from "next/navigation";
|
import { notFound } from "next/navigation";
|
||||||
|
import { source } from "@/lib/source";
|
||||||
|
|
||||||
export default async function Page(props: {
|
export default async function Page(props: {
|
||||||
params: Promise<{ slug?: string[] }>;
|
params: Promise<{ slug?: string[] }>;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { baseOptions } from "@/app/layout.config";
|
|
||||||
import { source } from "@/lib/source";
|
|
||||||
import { DocsLayout } from "fumadocs-ui/layouts/docs";
|
import { DocsLayout } from "fumadocs-ui/layouts/docs";
|
||||||
import type { ReactNode } from "react";
|
import type { ReactNode } from "react";
|
||||||
|
import { baseOptions } from "@/app/layout.config";
|
||||||
|
import { source } from "@/lib/source";
|
||||||
|
|
||||||
export default function Layout({ children }: { children: ReactNode }) {
|
export default function Layout({ children }: { children: ReactNode }) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
export const dynamic = "force-static";
|
export const dynamic = "force-static";
|
||||||
import { Toaster } from "@/components/ui/sonner";
|
|
||||||
import { RootProvider } from "fumadocs-ui/provider";
|
import { RootProvider } from "fumadocs-ui/provider";
|
||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { Poppins } from "next/font/google";
|
import { Poppins } from "next/font/google";
|
||||||
import { NuqsAdapter } from "nuqs/adapters/next/app";
|
import { NuqsAdapter } from "nuqs/adapters/next/app";
|
||||||
import type { ReactNode } from "react";
|
import type { ReactNode } from "react";
|
||||||
|
import { Toaster } from "@/components/ui/sonner";
|
||||||
import "./global.css";
|
import "./global.css";
|
||||||
|
|
||||||
const poppins = Poppins({
|
const poppins = Poppins({
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export const dynamic = "force-static";
|
export const dynamic = "force-static";
|
||||||
|
|
||||||
import type { MetadataRoute } from "next";
|
import type { MetadataRoute } from "next";
|
||||||
|
|
||||||
export default function manifest(): MetadataRoute.Manifest {
|
export default function manifest(): MetadataRoute.Manifest {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export const dynamic = "force-static";
|
export const dynamic = "force-static";
|
||||||
|
|
||||||
import type { MetadataRoute } from "next";
|
import type { MetadataRoute } from "next";
|
||||||
|
|
||||||
export default function robots(): MetadataRoute.Robots {
|
export default function robots(): MetadataRoute.Robots {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export const dynamic = "force-static";
|
export const dynamic = "force-static";
|
||||||
|
|
||||||
import type { MetadataRoute } from "next";
|
import type { MetadataRoute } from "next";
|
||||||
|
|
||||||
export default function sitemap(): MetadataRoute.Sitemap {
|
export default function sitemap(): MetadataRoute.Sitemap {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import * as SwitchPrimitives from "@radix-ui/react-switch";
|
import * as SwitchPrimitives from "@radix-ui/react-switch";
|
||||||
import { Moon, Sun } from "lucide-react";
|
import { Moon, Sun } from "lucide-react";
|
||||||
import { useTheme } from "next-themes";
|
import { useTheme } from "next-themes";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
export function ThemeToggle({ className }: { className?: string }) {
|
export function ThemeToggle({ className }: { className?: string }) {
|
||||||
const { setTheme, resolvedTheme } = useTheme();
|
const { setTheme, resolvedTheme } = useTheme();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { type VariantProps, cva } from "class-variance-authority";
|
import { cva, type VariantProps } from "class-variance-authority";
|
||||||
import { Slot as SlotPrimitive } from "radix-ui";
|
import { Slot as SlotPrimitive } from "radix-ui";
|
||||||
import type * as React from "react";
|
import type * as React from "react";
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<style
|
<style
|
||||||
// biome-ignore lint/security/noDangerouslySetInnerHtml: <explanation>
|
// biome-ignore lint/security/noDangerouslySetInnerHtml: This is safe as we control the content.
|
||||||
dangerouslySetInnerHTML={{
|
dangerouslySetInnerHTML={{
|
||||||
__html: Object.entries(THEMES)
|
__html: Object.entries(THEMES)
|
||||||
.map(
|
.map(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { docs } from "@/.source";
|
|
||||||
import { loader } from "fumadocs-core/source";
|
import { loader } from "fumadocs-core/source";
|
||||||
|
import { docs } from "@/.source";
|
||||||
|
|
||||||
export const source = loader({
|
export const source = loader({
|
||||||
baseUrl: "/docs",
|
baseUrl: "/docs",
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { DEFAULT_STACK, type StackState, TECH_OPTIONS } from "@/lib/constant";
|
|
||||||
import {
|
import {
|
||||||
type UrlKeys,
|
|
||||||
parseAsArrayOf,
|
parseAsArrayOf,
|
||||||
parseAsString,
|
parseAsString,
|
||||||
parseAsStringEnum,
|
parseAsStringEnum,
|
||||||
|
type UrlKeys,
|
||||||
} from "nuqs";
|
} from "nuqs";
|
||||||
|
import { DEFAULT_STACK, type StackState, TECH_OPTIONS } from "@/lib/constant";
|
||||||
|
|
||||||
const getValidIds = (category: keyof typeof TECH_OPTIONS): string[] => {
|
const getValidIds = (category: keyof typeof TECH_OPTIONS): string[] => {
|
||||||
return TECH_OPTIONS[category]?.map((opt) => opt.id) ?? [];
|
return TECH_OPTIONS[category]?.map((opt) => opt.id) ?? [];
|
||||||
|
|||||||
42
biome.json
42
biome.json
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
"$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
|
||||||
"vcs": {
|
"vcs": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"clientKind": "git",
|
"clientKind": "git",
|
||||||
@@ -7,26 +7,24 @@
|
|||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"ignoreUnknown": false,
|
"ignoreUnknown": false,
|
||||||
"ignore": [
|
"includes": [
|
||||||
".next",
|
"**",
|
||||||
"dist",
|
"!**/.next",
|
||||||
".source",
|
"!**/dist",
|
||||||
"out",
|
"!**/.source",
|
||||||
"template",
|
"!**/out",
|
||||||
"templates",
|
"!**/templates/**",
|
||||||
".turbo",
|
"!**/.turbo",
|
||||||
"package.json",
|
"!**/package.json",
|
||||||
"analytics-data.json"
|
"!**/analytics-data.json"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"formatter": {
|
"formatter": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"indentStyle": "tab",
|
"indentStyle": "tab",
|
||||||
"ignore": ["**/templates"]
|
"includes": ["**", "!**/templates"]
|
||||||
},
|
|
||||||
"organizeImports": {
|
|
||||||
"enabled": true
|
|
||||||
},
|
},
|
||||||
|
"assist": { "actions": { "source": { "organizeImports": "on" } } },
|
||||||
"linter": {
|
"linter": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"rules": {
|
"rules": {
|
||||||
@@ -44,9 +42,21 @@
|
|||||||
"noUnusedImports": "error",
|
"noUnusedImports": "error",
|
||||||
"noUnusedLabels": "error",
|
"noUnusedLabels": "error",
|
||||||
"noUnusedVariables": "error"
|
"noUnusedVariables": "error"
|
||||||
|
},
|
||||||
|
"style": {
|
||||||
|
"noParameterAssign": "error",
|
||||||
|
"useAsConstAssertion": "error",
|
||||||
|
"useDefaultParameterLast": "error",
|
||||||
|
"useEnumInitializers": "error",
|
||||||
|
"useSelfClosingElements": "error",
|
||||||
|
"useSingleVarDeclarator": "error",
|
||||||
|
"noUnusedTemplateLiteral": "error",
|
||||||
|
"useNumberNamespace": "error",
|
||||||
|
"noInferrableTypes": "error",
|
||||||
|
"noUselessElse": "error"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignore": ["template"]
|
"includes": ["**", "!**/template"]
|
||||||
},
|
},
|
||||||
"javascript": {
|
"javascript": {
|
||||||
"formatter": {
|
"formatter": {
|
||||||
|
|||||||
20
bun.lock
20
bun.lock
@@ -4,7 +4,7 @@
|
|||||||
"": {
|
"": {
|
||||||
"name": "better-t-stack",
|
"name": "better-t-stack",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "1.9.4",
|
"@biomejs/biome": "^2.0.0",
|
||||||
"@changesets/cli": "^2.29.3",
|
"@changesets/cli": "^2.29.3",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"lint-staged": "^15.5.2",
|
"lint-staged": "^15.5.2",
|
||||||
@@ -96,23 +96,23 @@
|
|||||||
|
|
||||||
"@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
|
"@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
|
||||||
|
|
||||||
"@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="],
|
"@biomejs/biome": ["@biomejs/biome@2.0.0", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.0.0", "@biomejs/cli-darwin-x64": "2.0.0", "@biomejs/cli-linux-arm64": "2.0.0", "@biomejs/cli-linux-arm64-musl": "2.0.0", "@biomejs/cli-linux-x64": "2.0.0", "@biomejs/cli-linux-x64-musl": "2.0.0", "@biomejs/cli-win32-arm64": "2.0.0", "@biomejs/cli-win32-x64": "2.0.0" }, "bin": { "biome": "bin/biome" } }, "sha512-BlUoXEOI/UQTDEj/pVfnkMo8SrZw3oOWBDrXYFT43V7HTkIUDkBRY53IC5Jx1QkZbaB+0ai1wJIfYwp9+qaJTQ=="],
|
||||||
|
|
||||||
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@1.9.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw=="],
|
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.0.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QvqWYtFFhhxdf8jMAdJzXW+Frc7X8XsnHQLY+TBM1fnT1TfeV/v9vsFI5L2J7GH6qN1+QEEJ19jHibCY2Ypplw=="],
|
||||||
|
|
||||||
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@1.9.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg=="],
|
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.0.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-5JFhls1EfmuIH4QGFPlNpxJQFC6ic3X1ltcoLN+eSRRIPr6H/lUS1ttuD0Fj7rPgPhZqopK/jfH8UVj/1hIsQw=="],
|
||||||
|
|
||||||
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g=="],
|
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-BAH4QVi06TzAbVchXdJPsL0Z/P87jOfes15rI+p3EX9/EGTfIjaQ9lBVlHunxcmoptaA5y1Hdb9UYojIhmnjIw=="],
|
||||||
|
|
||||||
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA=="],
|
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Bxsz8ki8+b3PytMnS5SgrGV+mbAWwIxI3ydChb/d1rURlJTMdxTTq5LTebUnlsUWAX6OvJuFeiVq9Gjn1YbCyA=="],
|
||||||
|
|
||||||
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg=="],
|
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-09PcOGYTtkopWRm6mZ/B6Mr6UHdkniUgIG/jLBv+2J8Z61ezRE+xQmpi3yNgUrFIAU4lPA9atg7mhvE/5Bo7Wg=="],
|
||||||
|
|
||||||
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg=="],
|
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-tiQ0ABxMJb9I6GlfNp0ulrTiQSFacJRJO8245FFwE3ty3bfsfxlU/miblzDIi+qNrgGsLq5wIZcVYGp4c+HXZA=="],
|
||||||
|
|
||||||
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@1.9.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg=="],
|
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.0.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-vrTtuGu91xNTEQ5ZcMJBZuDlqr32DWU1r14UfePIGndF//s2WUAmer4FmgoPgruo76rprk37e8S2A2c0psXdxw=="],
|
||||||
|
|
||||||
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="],
|
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.0.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2USVQ0hklNsph/KIR72ZdeptyXNnQ3JdzPn3NbjI4Sna34CnxeiYAaZcZzXPDl5PYNFBivV4xmvT3Z3rTmyDBg=="],
|
||||||
|
|
||||||
"@changesets/apply-release-plan": ["@changesets/apply-release-plan@7.0.12", "", { "dependencies": { "@changesets/config": "^3.1.1", "@changesets/get-version-range-type": "^0.4.0", "@changesets/git": "^3.0.4", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", "lodash.startcase": "^4.4.0", "outdent": "^0.5.0", "prettier": "^2.7.1", "resolve-from": "^5.0.0", "semver": "^7.5.3" } }, "sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ=="],
|
"@changesets/apply-release-plan": ["@changesets/apply-release-plan@7.0.12", "", { "dependencies": { "@changesets/config": "^3.1.1", "@changesets/get-version-range-type": "^0.4.0", "@changesets/git": "^3.0.4", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", "lodash.startcase": "^4.4.0", "outdent": "^0.5.0", "prettier": "^2.7.1", "resolve-from": "^5.0.0", "semver": "^7.5.3" } }, "sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ=="],
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"deploy:web": "bun run build:web:cloudflare && bunx wrangler pages deploy ./apps/web/out"
|
"deploy:web": "bun run build:web:cloudflare && bunx wrangler pages deploy ./apps/web/out"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "1.9.4",
|
"@biomejs/biome": "^2.0.0",
|
||||||
"@changesets/cli": "^2.29.3",
|
"@changesets/cli": "^2.29.3",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"lint-staged": "^15.5.2",
|
"lint-staged": "^15.5.2",
|
||||||
|
|||||||
Reference in New Issue
Block a user